package com.lykj.modules.shop.service;

import com.lykj.modules.shop.entity.StoreProduct;
import com.lykj.modules.shop.entity.UserOrder;
import com.lykj.modules.shop.excel.UserOrderExcel;
import com.lykj.modules.shop.vo.UserOrderVO;
import com.lykj.core.mp.base.BaseService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 现金订单表 服务类
 *
 * @author cxl
 * @since 2022-01-16
 */
public interface UserOrderService extends BaseService<UserOrder> {

	/**
	 * 自定义分页
	 *
	 * @param page
	 * @param userOrder
	 * @return
	 */
	IPage<UserOrderVO> selectUserOrderPage(IPage<UserOrderVO> page, UserOrderVO userOrder);

	/**
	 * 导出订单数据
	 *
	 * @param userOrder
	 * @return
	 */
	List<UserOrderExcel> export(UserOrderVO userOrder);

	/**
	 * 保存现金订单
	 *
	 * @param tenantId
	 * @param userId
	 * @param contacts
	 * @param mobile
	 * @param shippingAddress
	 * @param storeProduct
	 * @param number
	 * @param payType
	 * @param status
	 * @param remark
	 */
	UserOrder insertMoneyOrder(String tenantId,
						  Long userId,
						  String contacts,
						  String mobile,
						  String shippingAddress,
						  StoreProduct storeProduct,
						  BigDecimal number,
						  int payType,
						  int status,
						  String deliveryApplyId,
						  String remark);
	/**
	 * 保存积分订单
	 *
	 * @param tenantId
	 * @param userId
	 * @param contacts
	 * @param mobile
	 * @param shippingAddress
	 * @param storeProduct
	 * @param number
	 * @param payType
	 * @param status
	 * @param remark
	 */
	UserOrder insertIntegralOrder(String tenantId,
							   Long userId,
							   String contacts,
							   String mobile,
							   String shippingAddress,
							   StoreProduct storeProduct,
							   BigDecimal number,
							   int payType,
							   int status,
							   String deliveryApplyId,
							   String remark);
	/**
	 * 更改处理状态
	 *
	 * @param id
	 */
	void dispose(Long id);

	/**
	 * 停止分红
	 *
	 * @param id
	 */
	void stopBonus(Long id);

	/**
	 * 累加分红金额
	 *
	 * @param number
	 * @param id
	 */
	void totalBonus(BigDecimal number, Long id);

	/**
	 * 积分兑换
	 *
	 * @param params
	 * @return
	 */
	boolean redeem(Map<String, Object> params);
	/**
	 * 积分兑换
	 *
	 * @param params
	 * @return
	 */
	UserOrder wxredeem(Map<String, Object> params);

	/**
	 * 确认收货
	 *
	 * @param userOrder
	 */
	void confirmReceipt(UserOrder userOrder);

	/**
	 * 分配分红资格
	 *
	 * @param userOrder
	 */
	void bonusStatus(UserOrder userOrder);

	/**
	 * 给推荐人奖励第一单积分
	 *
	 * @param userOrder
	 */
	void awardIntegral(UserOrder userOrder);

	/**
	 * 获取订单总额
	 * @param userId
	 */
	BigDecimal ordersTotal(Long userId);

	/**
	 * 获取公益订单总额
	 * @param userId
	 */
	BigDecimal bonusOrdersTotal(Long userId);

	/**
	 * 获取订单总额
	 */
	BigDecimal sumPayPrice();
}
